/*
 * Clase principal del servidor, realizará
 * una conexión via RMI.
 */

package edu.uoc.tds.pec3.servidor;

import java.util.logging.Level;
import java.util.logging.Logger;
import edu.uoc.tds.pec3.comun.PEC3Exception;
import edu.uoc.tds.pec3.i18n.TDSLanguageUtils;
import java.awt.*;
import java.net.MalformedURLException;
import java.rmi.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Servidor extends JFrame implements ActionListener {
    private static final long serialVersionUID = 1L;
    private boolean conectado = false;
    private RemotoImpl remotoPEC3;
    private JLabel texto;
    private JButton botonIniciar;
    private JButton botonDetener;

    public Servidor() {
        super(TDSLanguageUtils.getMessage("servidorPEC3.frame.titulo"));
        VentanaInicio();
    }

    private void VentanaInicio(){
        setLocation(300, 300);
        setPreferredSize(new Dimension(600, 110));
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	setResizable(false);

        // En la region norte de la ventana ponemos un JLabel, para escribir
        texto = new JLabel();
        texto.setText(TDSLanguageUtils.getMessage("servidorPEC3.etiqueta1.titulo"));
        add(texto, BorderLayout.NORTH);

        // Creamos un panel para el sur, con botones para conectar y desconectar
        JPanel panelSur = new JPanel(new FlowLayout());
        botonIniciar = new JButton
                (TDSLanguageUtils.getMessage("servidorPEC3.botonIniciar.titulo"));
        botonIniciar.setFocusable(false);

        botonDetener = new JButton
                (TDSLanguageUtils.getMessage("servidorPEC3.botonDetener.titulo"));
        botonDetener.setFocusable(false);

        panelSur.add(botonIniciar);
        panelSur.add(botonDetener);
        add(panelSur, BorderLayout.SOUTH);
        
        // Tenemos que añadir en cada boton el ActionListener, para que sea sensible a
        // pulsaciones.
        botonIniciar.addActionListener(this);
        botonDetener.addActionListener(this);

        //Ordenamos los componentes
        pack();
        //Hacemos visible la ventana
	setVisible(true);
    }

    private void conectarServidor() throws PEC3Exception {
        try {
            remotoPEC3 = new RemotoImpl();
            Naming.rebind("rmi://localhost/eGestion", remotoPEC3);
            conectado = true;

        } catch (MalformedURLException malformedurlexception) {
             throw new PEC3Exception(PEC3Exception.ERR_URL);

        } catch(RemoteException remoteexception) {
            throw new PEC3Exception(PEC3Exception.ERR_REMOTO);
        }

        if (conectado) {
            botonIniciar.setEnabled(false);
            texto.setForeground(Color.blue);
            texto.setText(TDSLanguageUtils.getMessage("servidorPEC3.etiqueta2.titulo"));
        } 
    }

    private void desconectarServidor() throws PEC3Exception {
        remotoPEC3 = null;
        
        if (!conectado) {
                JOptionPane.showMessageDialog(this,
                    TDSLanguageUtils.getMessage("servidorPEC3.mensaje2.titulo"));
        } else {
            try {
                Naming.unbind("eGestion");conectado = false;
                botonIniciar.setEnabled(true);
                texto.setForeground(Color.black);
                texto.setText(TDSLanguageUtils.getMessage("servidorPEC3.mensaje3.titulo"));
                
               }

               catch (RemoteException remoteexception) {
                throw new PEC3Exception(PEC3Exception.ERR_DESCON);
            } catch(NotBoundException notboundexception) {
                JOptionPane.showMessageDialog(this,
                    TDSLanguageUtils.getMessage("servidorPEC3.mensaje2.titulo"));
                conectado = false;
                System.out.println(notboundexception.getMessage());
                notboundexception.printStackTrace();

            } catch(MalformedURLException malformedurlexception) {
                throw new PEC3Exception(PEC3Exception.ERR_DESCON);

            }
        }
    }

    private void cerrarVentana() throws PEC3Exception {
        if(conectado) desconectarServidor();
        setVisible(false);
        System.exit(0);
    }

    /**
     * Método para la ejecución de los botones.
     * @param e
     */
    @Override
    public void actionPerformed(ActionEvent e)  {
        if (e.getSource() == botonIniciar){
            try {
                conectarServidor();
            } catch (PEC3Exception ex) {
                Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else if (e.getSource() == botonDetener){
            try {
                desconectarServidor();
            } catch (PEC3Exception ex) {
                Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}
